package com.pawernode.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.amqp.core.*;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ配置类，用于声明交换机、队列和绑定关系
 */
@Configuration
@ConfigurationProperties(prefix = "my")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RabbitConfig {

    private String exchangeName;
    private String queueName;

    /**
     * 创建一个直连交换机
     *
     * @return DirectExchange对象，用于RabbitMQ的直连交换机
     */
    @Bean
    public DirectExchange directExchange() {
        // 默认持久化的
        return ExchangeBuilder.directExchange(exchangeName).build();
    }

    /**
     * 创建一个持久化的队列
     *
     * @return Queue对象，代表一个持久化的队列
     */
    @Bean
    public Queue queue() {
        // 默认持久化的
        return QueueBuilder.durable(queueName).build();
    }

    /**
     * 将队列绑定到直连交换机上，并指定路由键
     *
     * @param directExchange 直连交换机
     * @param queue 队列
     * @return Binding对象，代表队列和交换机之间的绑定关系
     */
    @Bean
    public Binding binding(DirectExchange directExchange, Queue queue) {
        return BindingBuilder.bind(queue).to(directExchange).with("info");
    }
}
